"""Given a string s, find the length of the longest 
substring
 without repeating characters.

 

Example 1:

Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:

Input: s = "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:

Input: s = "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.
 

Constraints:

0 <= s.length <= 5 * 104
s consists of English letters, digits, symbols and spaces."""

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        std::unordered_set<char> occ;
        int ans = 0;
        int rk = -1;

        for (int i = 0; i < s.size(); i++) {
            if (i != 0) {
                occ.erase(s[i-1]);
            }
            while(rk + 1 < s.size() && !occ.count(s[rk + 1])) {
                occ.insert(s[rk + 1]);
                rk++;
            }
            ans = max(ans, rk + 1 - i);
        }
        return ans;
    }
};